package com.etl.base.admin.utils;

import org.junit.Before;
import org.junit.Test;

import java.sql.*;
import java.util.Properties;

/**
 * 测试数据库元数据
 */
public class DataBaseMetaDataTest {

    private Connection connection;

    //获取所有数据库
    @Before
    public void init() throws Exception {
        //Registering the Driver
        String driver ="com.mysql.cj.jdbc.Driver";
        //链接sql数据库
        String url="jdbc:mysql://139.224.43.127/etl_datasource_info?useUnicode=true&characterEncoding=utf8";
        //账号密码
        String username="root";
        String password="Ss4444....";
        //创建属性
        Properties props = new Properties();
        //获取数据库的备注信息
        props.put("remarksReporting","true");
        //账户密码匹配
        props.put("user",username);
        props.put("password",password);

        //1.获取连接
        Class.forName(driver);//注册驱动
        connection = DriverManager.getConnection(url,props);
    }


    //获取数据库基本信息
    @Test
    public void test01() throws Exception {
        //2.获取元数据
        DatabaseMetaData metaData = connection.getMetaData();

        //3.获取数据库基本信息 名称
        System.out.println(metaData.getUserName());
        //是否支持事务
        System.out.println(metaData.supportsTransactions());
        //数据库类型 Mysql oracle 之类的
        System.out.println(metaData.getDatabaseProductName());
    }


    //获取数据库列表
    @Test
    public void test02() throws SQLException {
        //1.获取元数据
        DatabaseMetaData metaData = connection.getMetaData();
        //2.获取所有数据库列表
        ResultSet rs = metaData.getCatalogs();
        while (rs.next()) {
            System.out.println("数据库展示："+rs.getString(1));
        }
        //3.关流
        rs.close();
        //元数据关流
        connection.close();
    }


    //获取指定数据库中的表信息
    @Test
    public void test03() throws Exception {
        //1.获取元数据
        DatabaseMetaData metaData = connection.getMetaData();

        /**
         * 2.获取数据库中表信息
         * catalog ： 指定数据库
         * schemaPattern ： 指定数据库类型 如 mysql oracle
         * tableNamePattern : 指定数据表结构
         */

        ResultSet rs = metaData.getTables("etl-config", null,null, new String[]{"TABLE"});

        //循环找下一个
        while (rs.next()) {
            System.out.println("指定数据库中所有数据表："+rs.getString("TABLE_NAME"));
        }
    }


    //获取指定表中的字段信息
    @Test
    public void test04() throws Exception {

        DatabaseMetaData metaData = connection.getMetaData();
        /**
         * 获取 ’指定‘ 表中的字段信息
         * catalog ： 指定数据库
         * schemaPattern ： 指定数据库类型 如 mysql oracle
         * tableNamePattern : 指定数据表结构
         */
        ResultSet rs = metaData.getColumns(null, null, "config_info", null);
        //循环找下一个
        while (rs.next()) {
            System.out.println("config_info表中所有字段："+rs.getString("COLUMN_NAME"));
        }
    }

}